package com.youdianda.service.impl;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.youdianda.dto.YddUserDTO;
import com.youdianda.dto.YddUserPageQueryDTO;
import com.youdianda.entity.YddUser;
import com.youdianda.mapper.YddUserMapper;
import com.youdianda.mapper.YddUserTrueMapper;
import com.youdianda.result.Result;
import com.youdianda.service.IYddUserTrueService;
import com.youdianda.vo.YddUserPageQueryVO;
import com.youdianda.vo.YddUserVO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.DigestUtils;

import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;

@Service
@Slf4j
public class YddUserTrueServiceImpl extends ServiceImpl<YddUserTrueMapper, YddUser> implements IYddUserTrueService {

    @Autowired
    private YddUserTrueMapper yddUserTrueMapper;


    /**会员列表分页*/
    @Override
    public Result<YddUserPageQueryVO> yddUserList(YddUserPageQueryDTO yddUserPageQueryDTO) {

        String username = yddUserPageQueryDTO.getUsername();
        String mobile = yddUserPageQueryDTO.getMobile();
        Integer sex = yddUserPageQueryDTO.getSex();

        YddUserPageQueryVO vo = new YddUserPageQueryVO();

        Integer count = yddUserTrueMapper.getUserCountByNameAndMobileAndUsername(username,mobile,sex);
        Integer pageSize = yddUserPageQueryDTO.getLimit();
        Integer currentPage = yddUserPageQueryDTO.getPage();
        Integer totalPages;
        if (count % pageSize>0){
            totalPages = count / pageSize;
            totalPages+=1;
        }else {
            totalPages = count / pageSize;
        }
        vo.setCount(count);
        vo.setPageSize(pageSize);
        vo.setTotalPages(totalPages);
        vo.setCurrentPage(currentPage);

        Integer start = (currentPage-1) * pageSize;


        List<YddUser> yddUserList = yddUserTrueMapper.getUserPageByNameAndMobileAndUsername(username,mobile,sex,start,pageSize);
        List<YddUserVO> voList = new ArrayList<>();
        for (YddUser user : yddUserList) {
            YddUserVO yddUserVO = new YddUserVO();
            BeanUtils.copyProperties(user,yddUserVO);
            yddUserVO.setDefault_data(user.getDefaultData());
            yddUserVO.setPassword("");
            voList.add(yddUserVO);
        }

        vo.setData(voList);

        return Result.success(vo);
    }

    /**会员详情*/
    @Override
    public Result<YddUserVO> getYddUserById(Integer id) {

        YddUser yddUser = yddUserTrueMapper.getYddUserById(id);
        YddUserVO vo = new YddUserVO();
        BeanUtils.copyProperties(yddUser,vo);
        vo.setDefault_data(yddUser.getDefaultData());
        vo.setPassword("");
        return Result.success(vo);
    }

    /**会员修改*/
    @Override
    public Result updateYddUser(YddUserDTO dto) {
        yddUserTrueMapper.updateYddUser(dto);
        return Result.success();
    }

    /**会员添加*/
    @Override
    @Transactional
    public Result addYddUser(YddUserDTO dto) {
        YddUser yddUser = new YddUser();
        BeanUtils.copyProperties(dto,yddUser);
        yddUser.setDefaultData("1");
        yddUser.setPassword(DigestUtils.md5DigestAsHex(yddUser.getPassword().getBytes(StandardCharsets.UTF_8)));
        yddUserTrueMapper.addYddUser(yddUser);
        return Result.success();
    }

    /**会员删除*/
    @Override
    @Transactional
    public Result deleteYssUser(Integer id) {
        yddUserTrueMapper.deleteYssUserById(id);
        return Result.success();
    }
}
